# 指定cmake的最低版本
cmake_minimum_required(VERSION 3.20)

# 项目名称
project(cmake_cache)

#[[
set(<variable> <value> ... CACHE <type> <docstring> [FORCE])
    type
        BOOL
            ON/OFF 选择框
        FILEPATH
            文件选择
        PATH
            目录选择
        STRING
            字符串
        INTERNAL
            内部变量
    docstring
        变量说明
    FORCE
        强制修改原先的缓存 -- 不设置，则不改变原本的缓存
]]

#[[
查看、修改缓存变量
1、cmake -S . -B build
2、ccmake build
]]

# 设置缓存变量
set(VAR1 "CACHE VAR1 VALUE-1" CACHE STRING "cache doc")
set(VAR1 "CACHE VAR1 VALUE-2" CACHE STRING "cache doc") # 无法改变缓存变量

# 访问缓存变量
message("VAR1 = ${VAR1}")

# 强制修改缓存变量
set(VAR1 "CACHE VAR1 VALUE-3" CACHE STRING "cache doc" FORCE)
message("VAR1 = ${VAR1}")

# bool类型
set(VAR_BOOL1 "ON" CACHE BOOL "VAR bool 001")
set(VAR_BOOL2 "OFF" CACHE BOOL "VAR bool 002")
message("VAR_BOOL1 = ${VAR_BOOL1}")
message("VAR_BOOL2 = ${VAR_BOOL2}")

# 文件类型
set(VAR_FILE "filepath" CACHE FILEPATH "VAR FILEPATH")
message("VAR_FILE = ${VAR_FILE}")

# 目录类型
set(VAR_PATH "PATH" CACHE PATH "VAR PATH")
message("VAR_PATH = ${VAR_PATH}")

# 内部缓存变量 -- gui中不可见
set(VAR_INTERNAL "INTERNAL" CACHE INTERNAL "VAR INTERNAL")
message("VAR_INTERNAL = ${VAR_INTERNAL}")

# 选择项 ON/OFF
option(OPT1 "opt1 doc" OFF) # OFF为默认值
option(OPT2 "opt2 doc" ON)

message("================================================================")

# 普通变量
set(NVAR1 "normal var1")

# 设置缓存变量覆盖普通变量的策略
# OLD：删除同名普通变量
# NEW：不删除普通变量，访问cache变量用 $CACHE{var_name}
cmake_policy(SET CMP0126 OLD)

# cache变量
set(NVAR1 "cache var1" CACHE STRING "cache doc")

message("NVAR1 = ${NVAR1}")
message("NVAR1 = $CACHE{NVAR1}") # 指定访问缓存变量

# 命令行传递缓存变量：cmake -S . -B build -D PARA1=para001
message("PARA1 = ${PARA1}")

